refector for legibility
authorJoey Hess <joeyh@joeyh.name>
Fri, 23 Sep 2022 22:53:06 +0000 (18:53 -0400)
committerJoey Hess <joeyh@joeyh.name>
Fri, 23 Sep 2022 22:53:06 +0000 (18:53 -0400)
Annex/Link.hs

index 5329febcdb51940623896418dabb7fbdaba8a2c5..1a344d07efccf91b2d1ced276a617e8016c57985 100644 (file)
@@ -217,36 +217,21 @@ restagePointerFiles r = unlessM (Annex.getState Annex.insmudgecleanfilter) $ do
        liftIO . Database.Keys.Handle.closeDbHandle
                =<< Annex.getRead Annex.keysdbhandle
        realindex <- liftIO $ Git.Index.currentIndexFile r
-       numsz@(numfiles, _) <- calcRestageLog (0, 0) $ \(_f, ic) (numfiles, sizefiles) ->
-               (numfiles+1, sizefiles + inodeCacheFileSize ic)
+       numsz@(numfiles, _) <- calcnumsz
        let lock = fromRawFilePath (Git.Index.indexFileLock realindex)
            lockindex = liftIO $ catchMaybeIO $ Git.LockFile.openLock' lock
            unlockindex = liftIO . maybe noop Git.LockFile.closeLock
            showwarning = warning $ unableToRestage Nothing
            go Nothing = showwarning
-           go (Just _) = withTmpDirIn (fromRawFilePath $ Git.localGitDir r) "annexindex" $ \tmpdir -> do
+           go (Just _) = withtmpdir $ \tmpdir -> do
                tsd <- getTSDelta 
                let tmpindex = toRawFilePath (tmpdir </> "index")
-               let replaceindex = liftIO $
-                       moveFile tmpindex realindex
+               let replaceindex = liftIO $ moveFile tmpindex realindex
                let updatetmpindex = do
                        r' <- liftIO $ Git.Env.addGitEnv r Git.Index.indexEnv
                                =<< Git.Index.indexEnvVal tmpindex
-                       -- Avoid git warning about CRLF munging.
-                       let r'' = r' { gitGlobalOpts = gitGlobalOpts r' ++
-                               [ Param "-c"
-                               , Param $ "core.safecrlf=" ++ boolConfig False
-                               ] }
-                       configfilterprocess numsz $ runsGitAnnexChildProcessViaGit' r'' $ \r''' ->
-                               Git.UpdateIndex.refreshIndex r''' $ \feeder -> do
-                                       let atend = do
-                                               -- wait for index write
-                                               liftIO $ feeder Nothing
-                                               replaceindex
-                                       streamRestageLog atend $ \topf ic -> do
-                                               let f = fromTopFilePath topf r'''
-                                               liftIO $ whenM (isunmodified tsd f ic) $
-                                                       feedupdateindex f feeder
+                       configfilterprocess numsz $
+                               runupdateindex tsd r' replaceindex
                        return True
                ok <- liftIO (createLinkOrCopy realindex tmpindex)
                        <&&> catchBoolIO updatetmpindex
@@ -254,10 +239,30 @@ restagePointerFiles r = unlessM (Annex.getState Annex.insmudgecleanfilter) $ do
        when (numfiles > 0) $
                bracket lockindex unlockindex go
   where
+       withtmpdir = withTmpDirIn (fromRawFilePath $ Git.localGitDir r) "annexindex"
+
        isunmodified tsd f orig = 
                genInodeCache f tsd >>= return . \case
                        Nothing -> False
                        Just new -> compareStrong orig new
+                       
+       {- Avoid git warning about CRLF munging -}
+       avoidcrlfwarning r' = r' { gitGlobalOpts = gitGlobalOpts r' ++
+               [ Param "-c"
+               , Param $ "core.safecrlf=" ++ boolConfig False
+               ] }
+                       
+       runupdateindex tsd r' replaceindex = 
+               runsGitAnnexChildProcessViaGit' (avoidcrlfwarning r') $ \r'' ->
+                       Git.UpdateIndex.refreshIndex r'' $ \feeder -> do
+                               let atend = do
+                                       -- wait for index write
+                                       liftIO $ feeder Nothing
+                                       replaceindex
+                               streamRestageLog atend $ \topf ic -> do
+                                       let f = fromTopFilePath topf r''
+                                       liftIO $ whenM (isunmodified tsd f ic) $
+                                               feedupdateindex f feeder
        
        {- update-index is documented as picky about "./file" and it
         - fails on "../../repo/path/file" when cwd is not in the repo 
@@ -266,6 +271,9 @@ restagePointerFiles r = unlessM (Annex.getState Annex.insmudgecleanfilter) $ do
        feedupdateindex f feeder = do
                absf <- absPath f
                feeder (Just absf)
+       
+       calcnumsz = calcRestageLog (0, 0) $ \(_f, ic) (numfiles, sizefiles) ->
+               (numfiles+1, sizefiles + inodeCacheFileSize ic)
 
        {- filter.annex.process configured to use git-annex filter-process
         - is sometimes faster and sometimes slower than using